Obsługa repeating section w Nintex RPA
Table of Contents
Minęło sporo czasu, odkąd ostatnio napisałem post na temat platformy Nintex. Ostatnio jednak zostałem zaangażowany w swój pierwszy, prawdziwy projekt z Nintex RPA (wcześniej znany jako Foxtrot, narzędzie RPA w pakiecie Nintex, przeczytaj jego recenzję tutaj). Jednym z wyzwań, przed którymi stanąłem, było dostanie się do danych z sekcji powtarzalnej (repeating section)…
Nintex RPA sprawdza się naprawdę dobrze, gdy chodzi o tabele na stronach internetowych. Ale przez „tabele” mam na myśli strukturę, która korzysta z elementów DOM <table>, a nawet lepiej, jeśli używa tagów <thead> i <tbody>. W przypadku takich obiektów RPA może po prostu iterować w pętli po wierszach i uzyskiwać dane z każdej pojedynczej komórki.
Niestety dla Nintex Forms – repeating section nie jest zwykłą tabelą (jeśli podejrzysz jego kod). Jest to duża grupa tagów DIV. I w takim przypadku – Nintex RPA zupełnie sobie z tym nie radzi.
Rozwiązanie
Pierwszą rzeczą, którą doradził mi Jake Dennison, ekspert ds. Automatyzacji procesów w Nintex, było po prostu unikanie pobierania danych bezpośrednio z interfejsu strony internetowej. To dobre podejście, o ile strona jest nieskomplikowana. Ale im bardziej złożona jest jej struktura DOM, tym lepiej jest stosować techniki bardziej bezbłędne. Jedną z nich jest użycie pliku Excel z tabelą podłączoną do widoku listy i faktyczne wysłanie zapytania do tego pliku Excel zamiast wyszukiwania danych na stronie internetowej.
Ta metoda eliminuje ryzyko, że w przypadku zmiany struktury DOM strony lub identyfikatora/ klasy elementu Nintex RPA nie będzie w stanie znaleźć wskazanego wcześniej obiektu. W tabeli Excela takie rzeczy się nie zdarzają 🙂
Gotowi? To zaczynamy!
1. Przygotuj Excel z danymi
Ważne! By zapobiec używaniu guidów jako nazw węzłów (np. <_x0031_40e6374-db6a-4956-badb-6e4a605f45c9 type="System.String">
) w strukturze XML upewnij się, że masz zdefiniowane nazwy pól wewnątrz sekcji powtarzalnej:
Najpierw przygotuj widok listy, który będzie zawierał wszystkie kolumny (pamiętaj, aby dodać kolumnę ID – bardzo się przydaje później), w tym pole przechowujące XML repeating section, do którego chcesz mieć dostęp z Nintex RPA.
Gdy widok jest gotowy, otwórz go i naciśnij przycisk „Export to Excela” na wstążce listy:
Otwórz pobrany plik query.iqy. Sprawdź poprawność danych i zapisz jako plik XLSX.
2. Otwieranie pliku Excel w Nintex RPA
Idź do designera i dodaj akcję „Open List”:
Ustaw adres URL pliku XLSX (1), wpisz nazwę listy (lub wybierz z istniejącą, 2), ustaw opcję zastępowania, jeśli istnieje (3) i na koniec – wciśnij „Importuj” (4) – otworzy się kreator, który pomoże Ci skonfigurować listę:
Przejdź szybko krok nr 1. W drugim kroku ustaw opcję: „Use inlcided field names” – spowoduje to użycie nazw nagłówków tabeli jako nazw kolumn listy:
Następnie sprawdź, co będzie importowane i w razie potrzeby zmień nazwy kolumn (1), usuń określone kolumny z importu (2), a po zakończeniu kliknij „Next” (3):
Ponownie „Next” na następnym ekranie. Teraz jesteś z powrotem na ekranie głównym. Import jest skonfigurowany. Możesz teraz kliknąć „OK”, a następnie sprawdzić, jak wygląda zawartość Twojej listy:
3. Pobieranie XML z Excel
Ten krok jest dość łatwy. Możesz iterować po każdym wierszu listy lub użyć funkcji o nazwie LOOKUP. Ja korzystam z LOOKUP, ponieważ mój bot działa w kontekście określonego rekordu. Następnie dodaj akcję „Create Variable” (pod „Data”) i skonfiguruj ją tak, aby pobierała wartość z pola XML, dla rekordu, którego identyfikator jest równy np. 20: [?Lookup("var_ExcelData_List", "20", "ID", "Addresses")]
W ten sposób otrzymasz kod XML. Teraz … jak zmienić go w listę?
4. Konwersja XML do listy z użyciem PowerShell
Najszybszym i najłatwiejszym sposobem jaki do tej pory znalazłem jest użycie programu PowerShell do wygenerowania pliku CSV z kodu XML, a następnie zaimportowanie go z powrotem do bota. Ja tak to wlaśnie zrobiłem.
Najpierw dodaj akcję „PowerShell” (jest w grupie „Advanced”)
Ważne! Jeśli nie widzisz grupy akcji „Advanced”, upewnij się, że są one dozwolone przez administratora, a Twoje konto ma ustawiony poziom „Ekspert”:
Następnie wpisz skrypt PowerShell:
[xml]$xmlToXpath = '[%var_XMLData_Txt]' $xmlToXpath.RepeaterData.Items.Item | Select-Object @( @{l="street";e={$_.Street."#text"}}, @{l="postcode";e={$_.PostCode."#text"}}, @{l="city";e={$_.City."#text"}}) | Export-Csv C:\Users\poszytekt\Documents\xml-to-csv.csv -NoTypeInformation -Delimiter:";" -Encoding:UTF8
Pierwszy wiersz służy do pobrania kodu XML ze zmiennej Nintex RPA i zapisania go do zmiennej PS. Następnie PowerShell iteruje po każdym wierszu z XML, uzyskując wartości z określonych węzłów i ostatecznie eksportując przekonwertowane dane do pliku CSV z wartościami rozdzielonymi średnikiem.
5. Otwieranie przekonwertowanego pliku CSV jako listy
Ten krok jest podobny do kroku nr 2. Ponownie użyj akcji „Open List” (w grupie „Lists”) i wskaż wyeksportowany plik CSV jako źródło. Następnie wpisz nazwę listy, ponownie ustaw opcję „Overwrite” i naciśnij „Import”.
Na następnym ekranie upewnij się, że używasz tego samego separatora co w PowerShell. W moim przypadku jest to średnik:
Na następnym ekranie ponownie wybierz opcję „Use included field names”, aby ustawić nagłówki kolumn na liście.
I wreszcie jesteś na ekranie, na którym możesz edytować nazwy kolumn i usuwać / dodawać kolumny z listy:
Po zakończeniu naciśnij „Next”, a następnie ponownie „Next”, aby wrócić do głównego ekranu kreatora. Teraz kliknij „OK”! Dane z XML są w końcu dostępne do użycia jako dane listy:
Mam nadzieję, że pomoże ci to zaoszczędzić godziny pracy. Jeśli masz jakieś pytania, zostaw mi komentarz!